package com.sky.vo;
/**
 * 1.当前模块名：sky-pojo
 *   模块作用：存放视图对象(Value Object)，用于Controller层返回给前端的结构化数据
 * 2.当前包名：com.sky.vo
 *   包作用：封装Controller层返回的视图数据模型（Value Object）
 * 3.当前类名：SetmealVO
 *   类作用：套餐详情视图对象，包含套餐基本信息和关联菜品列表
 */
import com.sky.entity.SetmealDish;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

/**
 * SetmealVO：套餐详情视图对象
 * 知识点说明：
 * 1. 数据聚合设计：整合套餐基础信息+关联菜品明细（减少前端请求次数）
 * 2. 冗余字段优化：categoryName避免前端额外查询分类接口
 * 3. 金融精度保障：BigDecimal类型确保价格计算准确
 * 4. 状态机管理：status字段控制套餐上下架状态（0=停用，1=启用）
 * 5. 时间追踪：updateTime记录最后更新时间（用于缓存刷新）
 * 6. 图片优化：image字段建议使用CDN加速路径
 * 7. 关联关系：setmealDishes字段存储套餐菜品组成明细
 * 8. 构建模式：@Builder支持流畅API创建对象
 * 9. 序列化支持：实现Serializable接口支持网络传输
 * 10. 富文本描述：description字段支持HTML格式内容
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SetmealVO implements Serializable {

    private Long id;

    //分类id
    private Long categoryId;

    //套餐名称
    private String name;

    //套餐价格
    private BigDecimal price;

    //状态 0:停用 1:启用
    private Integer status;

    //描述信息
    private String description;

    //图片
    private String image;

    //更新时间
    private LocalDateTime updateTime;

    //分类名称
    private String categoryName;

    //套餐和菜品的关联关系
    private List<SetmealDish> setmealDishes = new ArrayList<>();
}
